// wrapped by build app
define("dojox/wire/TableAdapter", ["dijit", "dojo", "dojox", "dojo/require!dojox/wire/CompositeWire"], function (dijit, dojo, dojox) {
    dojo.provide("dojox.wire.TableAdapter");

    dojo.require("dojox.wire.CompositeWire");

    dojo.declare("dojox.wire.TableAdapter", dojox.wire.CompositeWire, {
        // summary:
        //		A composite Wire for table rows
        // description:
        //		This class has multiple child Wires for object properties or array
        //		elements of a table row.
        //		The root object for this class must be an array.
        //		When an object with Wires is specified to 'columns' property, they
        //		are used to get a row object with property values.
        //		When an array of Wires is specified to 'columns' property, they
        //		are used to get a row array with element values.
        //		The row values are returned in an array.
        //		This class only supports getValue(), but not setValue().

        _wireClass:"dojox.wire.TableAdapter",

        constructor:function (/*Object*/ args) {
            // summary:
            //		Initialize properties
            // description:
            //		If object properties or array elements specified in 'columns'
            //		property are not Wires, Wires are created from them as
            //		arguments, with 'parent' property set to this Wire instance.
            // args:
            //		Arguments to initialize properties:
            //
            //		- columns: An object or array containing child Wires for column values
            this._initializeChildren(this.columns);
        },

        _getValue:function (/*Array*/object) {
            // summary:
            //		Return an array of table row value (object or array)
            // description:
            //		This method iterates over an array specified to 'object'
            //		argument and calls getValue() method of the child Wires with
            //		each element of the array to get a row object or array.
            //		Finally, an array with the row objects or arrays are retuned.
            // object:
            //		A root array
            // returns:
            //		An array of table row value
            if (!object || !this.columns) {
                return object; //Array
            }

            var array = object;
            if (!dojo.isArray(array)) {
                array = [array];
            }

            var rows = [];
            for (var i in array) {
                var row = this._getRow(array[i]);
                rows.push(row);
            }
            return rows; //Array
        },

        _setValue:function (/*Array*/object, /*Array*/value) {
            // summary:
            //		Not supported
            throw new Error("Unsupported API: " + this._wireClass + "._setValue");
        },

        _getRow:function (/*Object||Array*/object) {
            // summary:
            //		Return an array or object for a table row
            // description:
            //		This method calls getValue() method of the child Wires to
            //		create a row object or array.
            // returns:
            //		An array or object for a table row
            var row = (dojo.isArray(this.columns) ? [] : {}); // array or object
            for (var c in this.columns) {
                row[c] = this.columns[c].getValue(object);
            }
            return row; //Array||Object
        }
    });

});
